Linux 文件权限管理
Table of Contents
1. 查看文件权限
执行 ls -l
查看目录下所有子目录和文件的权限及属性。输出结果中每列的含义如下:
- 第 1 部分: 文件类型和权限。
- 第 2 部分: i 节点,硬链接数。
- 第 3 部分: 属主,文件所有者。
- 第 4 部分: 属组,所有者所在的用户组。
- 第 5 部分: 文件的大小。
- 第 6 部分: mtime,即最后一次修改时间。
- 第 7 部分: 文件或者目录名。
首先,第 1 部分的第 1 个字母表示文件类型,主要有下面几种:
-
普通文件;d
目录;l
链接文件;b
块设备文件,比如硬盘的存储设备等;c
字符设备文件,比如键盘;s
套接字文件,跟网络程序有关;p
管道文件。
之后 9 个字母中,每 3 个一组,分别表示文件所有者 u
权限,同组用户 g
权限和其他用户 o
权限。
属主可以用 a
表示 all users
,即这个文件属于所有用户。
每 3 个字母的组中,各字母依次分别为读 r
,写 w
和执行 x
权限。
权限位出现 -
表示无此权限。例如 rw-
为可读,可写,不可执行。
2. 用 chmod 更改权限
chmod (-R) <pattern> <file-or-dir-name>
命令用来修改权限。
-R
参数为是否为目标文件夹中的所有子项执行此命令 ( 更改文件夹所有子项的权限 )。
主要有两种方法。
2.1. 数字法
4
代表读权限。2
代表写权限。1
代表执行权限。
这样的三个数字之可以表示任何一种权限组合。
常用权限组合的有:
7
rwx 4+2+1=76
rw- 4+2+0=64
r-- 4+0+0=4
比如:
sudo chmod 666 <name>
给所有用户读和写的权限;sudo chmod -R 700 <dir-name>
给属主完全权限,其他人不给任何权限。-R
表示为所有子文件 ( 夹 ) 都配置此权限。
2.2. 参数法
可以操控的颗粒度很细。
基本格式是:
chmod (u|g|o|a)(+|-|=)(r|w|x|s|t) <file-or-dir-name>
u
所属用户。g
同组用户。o
其他用户。a
所有用户,相当于ugo
。+
原权限基础上,增加权限。-
原权限基础上,减少权限。=
权限修改为这里指定的内容。r
读。w
写。x
执行。s
运行时可置 UID。t
运行时可置 GID。
例子:
sudo chmod u+rw <name>
给属主增加读写权限。sudo chmod o-rwx <name>
不允许其他用户读写执行。sudo chmod g=rx <name>
同组用户只能读和执行。
3. 特殊权限
SUID 对应数字 4:
- 主要作用于可执行文件: 二进制文件以属主的身份执行,同时具有调用者的权限
- 作用于目录无意义
SGID 对应数字 2:
- 作用于可执行文件:
- 二进制文件以 调用者:文件属组 的身份执行,同时具有调用者属组的权限
- 主要作用于目录 (主要):
- 目录下属的所有文件与目录的属组都与该目录的属组保持相同
SBIT 对应数字 1:
- 作用于文件无意义
- 作用于目录 (主要):
- 在该目录内,该目录的属主在删除该目录下的文件和目录会有确认 (rm: remove write-protected regular empty file <file-name>?),但依旧可以删除
- 在该目录内,除该目录属主之外的所有用户只能删除自己创建的文件或目录,但不影响用户编辑其他用户创建的文件或目录
对于文件或目录的属主与属组权限部分:
- 权限有 x 时,设置特殊权限以后 x 变为 s
- 权限无 x 时,设置特殊权限以后 x 变为 S
对于文件或目录 others 的权限部分:
- 权限有 x 时,设置特殊权限 (SBIT) 后 x 变为 t
- 权限无 x 时,设置特殊权限 (SBIT) 后 x 变为 T